perm filename ARMUS[SYS,HE]7 blob sn#057821 filedate 1973-08-15 generic text, type T, neo UTF8
00100	IFN SIMU,<			;THIS IS SIMULATION ONLY
00200	ARM.IN:	SETZM INRUN		;TO CALL GAIN AND CHANGE JOBNAM TO [ARM]
00300		SETOM ARMINI		;INDICATES ARM.IN HAS BEEN CALLED
00400		PUSHJ P,GAIN
00500	ARM.ST:	SETO 1,			;INDICATES END OF RUN
00600		SKIPN ARMINI
00700		POPJ P,
00800		MOVEM 16,SSAVE+16	;SAVE SAIL AC'S EXCEPT FOR STACK
00900		MOVEI 16,SSAVE
01000		BLT 16,SSAVE+15
01100		SKIPE  INRUN
01200		JRST[	HRLZI 16,MSAVE	;PUT BACK IN RUN AC'S
01300			BLT 16,15
01400			MOVE 16,MSAVE+16
01500			JRST SSW]	;AND RETURN TO SPACE WAR
01600		JRST GETMES
01700	INRUN:	0			;IN THE MIDDLE OF A RUN DO NEXT TICK
01800	ARMINI:	0			;ARM.IN HAS BEEN CALLED
01900	SSAVE:	BLOCK 17		;SAIL AC'S
02000	MSAVE:	BLOCK 17		;USER AC'S
02100	WAIT:	HRLZI 16,SSAVE		;PUT BACK AC'S
02200		BLT 16,15
02300		MOVE 16,SSAVE+16
02400		SETZM INRUN
02500		POPJ P,
02600	GETMES:	SETOM INRUN
02700	>
02800	IFE SIMU,<
02900	START:	MOVE P,[XWD -PDLL,UPDL]
03000		PUSHJ P,GAIN
03100		OUTSTR[ASCIZ/!
03200	/]
03300	WAIT:
03400	>
03500		WRCV EXE
03600		HLRZ 5,EXE
03700		CAIE 5,MASTER
03800		JRST[	MOVEI 3,VERSN
03900			JRST FINISH]
04000	WAITED:	MOVE 1,SEGJOB
04100		HRRZM 1,JOB
04200		HLRZM 1,SEG
04300	IFN REPORT+TRACK,<
04400		MOVE 1,[IOWD  DBL-100,DATO]
04500		MOVEM 1,DATPT			;DATA POINTER
04600		MOVEM 1,DATIWD			;OUTPUT POINTER
04700	>
04800		SETZB 3,TRAJER
04900		MOVEI 0,0
05000		LDB 1,[POINT 3,EXE,35]
05100		CAIG 1,1
05200		JRST READ
05300	IFE ARMWORK,<
05400		MOVEI 3,NOTHER
05500		JRST FINISH
05600	>
05700	IFN REPORT+TRACK,<		;WRITE OUT DATA
05800		INIT 15,17
05900		SIXBIT /DSK/
06000		0
06100		JRST NDM
06200		MOVE 2,FILE
06300		MOVEM 2,DFILE
06400		MOVE 2,PPPN
06500		MOVEM 2,DPPPN
06600	IFN TRACK,<
06700		SKIPE WALK
06800		JRST[	LOOKUP 15,DFILE
06900			JRST NDMS
07000			MOVE 2,[IOWD DBL,DATO]
07100			MOVEM 2,DATPT
07200			INPUT 15,1
07300			JRST EXFN]
07400	>
07500		ENTER 15,DFILE
07600		JRST[NDMS:MOVEI 3,NODATA
07700			SUB 17,[XWD 1,1]
07800			JRST FINISH]
07900	>
08000	EXFN:	CAIN 1,3
08100		JRST[	MOVE 4,EXE
08200			TRNN 4,HOLDF
08300			JRST [	SKIPE ARGS
08400				SOS JUMPBK
08500				JRST MOVON]
08600			SOS 1,STKPTR
08700			MOVEI 2,(1)
08800			LDB 3,[POINT 9,EXE,26]
08900			SUBI 1,(3)
09000			HRLI 1,ARGS
09100			BLT 1,(2)
09200			TRNE 4,RELOCF
09300			JRST[	MOVE 1,STKPTR
09400				SUBI 1,(3)
09500				SUB 1,CBUFS
09600				HRRM 1,@STKPTR
09700				JRST BPTR]
09800		BPTR:	SOS STKPTR
09900		MOVON:	SETOM FUNCT
10000			JRST SSW]
10100		CAIE 1,2
10200		JRST[	MOVEI 3,INVMES
10300			JRST FINISH]
10400		SETZM FUNCT
10500		HRREI 2,BUF-1001
10600		MOVEM 2,CBUFS
10700		SETOM BUF
10800		SETZM DOING	;TRAJECTORY SET UP FOR
     

00100		SKIPE BAND
00200		JRST[	MOVEI 1,BUF
00300			MOVEM 1,GOODIE
00400			MOVEI 1,1001
00500			MOVEM 1,GOODIE+1
00600			SETZM GOODIE+2
00700			MOVE 14,BAND
00800			UFBRD 14,GOODIE
00900			JRST RE
01000			SKIPN BUF+1000
01100			JRST[	SETZM BLOCKS
01200				MOVEI 1,BUF2
01300				MOVEM 1,NXTBUF
01400				SETZM @NXTBUF
01500				JRST ZDTH]
01600			MOVEI 1,BUF2
01700			MOVEM 1,GOODIE
01800			MOVEI 1,20
01900			MOVEM 1,GOODIE+2
02000			UFBRD 14,GOODIE
02100			JRST RE
02200			MOVEI 1,=74
02300			SKIPN BUF2+1000
02400			MOVEI 1,0
02500			MOVEM 1,BLOCKS
02600			MOVEI 1,40
02700			MOVEM 1,GOODIE+2
02800			MOVEI 1,BUF
02900			MOVEM 1,NXTBUF
03000			MOVNS BUF2
03100			JRST ZDTH]
     

00100		MOVE 1,FILE
00200		MOVEM 1,LFILE
00300		MOVE 1,PPPN
00400		MOVEM 1,LPPPN
00500		INIT 16,17
00600		SIXBIT/DSK/
00700		XWD 0,0
00800		JRST[NDM:	MOVEI 3,NODEV
00900				JRST FINISH]
01000		LOOKUP 16,LFILE
01100		JRST[		MOVEI 3,NOFILE
01200				JRST FINISH]
01300		MOVS 1,LPPPN		;FILE LENGTH
01400		MOVN 1,1
01500		ASH 1,-11
01600		MOVEM 1,BLOCKS
01700		SOSGE BLOCKS
01800		JRST FINISH
01900		MOVE 10,[IOWD 1000,BUF]
02000		SETZ 11,
02100		IN 16,10
02200		JRST[	SOSGE BLOCKS
02300			JRST[	MOVEI 1,BUF2
02400				MOVEM 1,NXTBUF
02500				SETZM @NXTBUF
02600				JRST ZDTH]
02700			ADDI 10,1001
02800			IN 16,10
02900			JRST[	MOVEI 1,BUF
03000				MOVEM 1,NXTBUF
03100				MOVNS BUF2
03200				JRST ZDTH]
03300			JRST RE]
03400		JRST RE
     

00100	ZDTH:
00200		MOVE 1,[XWD DELTH,DELTH+1]
00300		SETZM DELTH
00400		BLT 1,DELTH+5
00500		MOVEI 1,=60
00600		MOVEM 1,STWT
00700		MOVNS BUF
00800	SSW:	
00900	IFE USER+TRACK,<LOCK 1,>
01000		PUSHJ P,SPACE
01100	WWS:
01200	IFE REPORT+TRACK<
01300	IFE USER<
01400		MOVEI 1,1
01500		CALLI 1,31
01600	>
01700	>
01800		MOVE BITSAV
01900		TRNE DTST
02000		JRST BACK
02100		MOVE 1,@NXTBUF
02200		JUMPGE 1,.+2			;MORE TRAJECTORY TO COME
02300		JRST[	SOSGE BLOCKS
02400			JRST[	SETZM @NXTBUF	;ALL DONE MAKK THIS AS LAST
02500				RELEASE 16,
02600				JRST WDO]
02700			SKIPE BAND
02800			JRST[	MOVE 1,NXTBUF
02900				MOVEM 1,GOODIE
03000				UFBRD 14,GOODIE
03100				JRST RBD
03200				MOVE 1,NXTBUF
03300				SKIPN 1000(1)
03400				SETZM BLOCKS
03500				MOVEI 1,20
03600				ADDM 1,GOODIE+2
03700				JRST ROK]
03800			MOVE 10,NXTBUF
03900			SOJ 10,
04000			HRLI 10,-1000
04100			IN 16,10
04200			JRST[ROK:MOVE 1,NXTBUF
04300				MOVNS (1)
04400				ADDI 1,1001
04500				CAILE 1,BUF2
04600				MOVEI 1,BUF
04700				MOVEM 1,NXTBUF
04800				JRST WDO]
04900		RBD:	MOVE 1,NXTBUF		;READ ERROR
05000			SETZM @NXTBUF		;MARK AS LAST
05100		WFF:	MOVE BITSAV		;AND WAIT FOR IT TO END
05200			TRNN DTST
05300			JRST WFF
05400		RE:	MOVEI 3,REAERR
05500			JRST BACK]
05600	WDO:
05700	IFN SIMU,<
05800		MOVEM 16,MSAVE+16
05900		MOVEI 16,MSAVE
06000		BLT 16,MSAVE+15
06100		HRLZI 16,SSAVE
06200		BLT 16,15
06300		MOVE 16,SSAVE+16
06400		SETZ 1,
06500		POPJ P,
06600	>
06700	IFE REPORT+TRACK,<
06800		IFE USER,<JRST WWS>
06900		IFN USER,<JRST SSW>
07000	>
07100	IFN TRACK,<
07200		SKIPE WALK
07300		JRST SSW
07400	>
07500	IFN REPORT+TRACK,<
07600		HRRZ 1,DATIWD		;START TO WRITE
07700		CAIL 1,DATO+DBL-1
07800		JRST DOD
07900		HRRZ 2,DATPT		;LAST LOC FILLED
08000	WA:	SUBI 2,(1)
08100		JUMPL 2,[MOVEI 2,DATO+DBL-1
08200		JRST WA]
08300		TRZ 2,177
08400		JUMPN 2,[	MOVN 1,2	;MORE THAN 200 WORDS SO WRITE IT OUT
08500				HRLM 1,DATIWD	;NEG WORD COUNT
08600				OUT 15,DATIWD
08700				HRRZ 1,DATIWD
08800				ADDI 1,(2)
08900				HRRM 1,DATIWD
09000				JRST DOD]
09100	DOD:
09200		IFE USER,<JRST WWS>
09300		IFN USER,<JRST SSW>
09400	>
     

00100	BACK:	
00200	IFE USER+TRACK,<UNLOCK 1,>
00300		SPCWAR 636367
00400		MOVEI 0,0
00500		SKIPE 3,TRAJER
00600		JRST[	IFE DEB+SIMU,<
00700			IFN TRACK,<SKIPN WALK>
00800				TRO RONLY
00900				MOVEM BITSAV
01000				MOVEI 1,1
01100				CALLI 1,31
01200			DRSW:	PUSHJ P,SPACE
01300			DRR:	MOVE BITSAV
01400				TRNN DTST
01500			IFE USER,<JRST DRR>
01600			IFN USER,<JRST DRSW>
01700				SPCWAR 636367
01800				MOVEI 0,0
01900				PUSHJ P,SETSET
02000	>
02100				JRST NOERR]
02200	IFN SIMU,<PUSHJ P,SETSET>
02300	NOERR:	IFE USER,<RELEASE 17,
02400		RELEASE 14,
02500	>
02600		IFN REPORT+TRACK,<
02700		PUSHJ P,CLODAT
02800		CLOSE 15,
02900		>
03000		SKIPN SEG
03100		JRST[	MOVEM 3,STATUS
03200			MOVE 2,[XWD TH,THETA]
03300			BLT 2,THETA+6
03400			MOVE 2,[XWD TORE,ARGS+10]
03500			BLT 2,ARGS+15
03600			MOVE 1,JOB
03700			MOVEM 1,REPLY
03800			SEND REPLY
03900			JRST WAIT
04000			JRST WAIT]
04100		MOVE 2,SEG
04200		CALLI 2,400016
04300		JRST WAIT
04400		HRRZ 4,NAME
04500		MOVE 2,(4)
04600		HLRZ 4,NAME
04700		MOVEM 2,(4)
04800		PUSHJ P,[SETNAM:MOVE 2,THETA
04900		MOVEI 4,6(2)
05000		HRLI 2,TH
05100		IFN TRACK,<SKIPN WALK>
05200		BLT 2,(4)
05300		MOVE 2,ETOR
05400		MOVEI 4,6(2)
05500		HRLI 2,TORE
05600		BLT 2,(4)
05700		PUSHJ P,SETFLT
05800		MOVEM 3,@STATUS
05900		MOVE 4,DOING
06000		MOVEM 4,@SEGMENT
06100		HRRZ 2,NAME
06200		SETZM (2)
06300		HRLZI 2,40
06400		MOVEM 2,IBIT
06500		INTUUO 4,JOB
06600		JUMP
06700		MOVEI 2,0
06800		CORE2 2,
06900		JFCL
07000		POPJ P,]
07100		JRST WAIT
     

00100	IFN REPORT+TRACK,<
00200	CLODAT:IFN TRACK,<
00300		SKIPE WALK
00400		POPJ P,
00500	>
00600	NWI:	HRRZ 1,DATIWD
00700		HRRZ 2,DATPT
00800		SUBI 2,(1)
00900		JUMPL 2,[	HRRZI 2,DATO+DBL-1
01000				SUBI 2,(1)
01100				MOVN 2,2
01200				HRLM 2,DATIWD
01300				SKIPE 2
01400				OUT 15,DATIWD
01500				MOVEI 2,DATO-1
01600				HRRM 2,DATIWD
01700				JRST NWI]
01800		ADDI 2,200
01900		TRZ 2,177
02000		MOVN 1,2
02100		HRLM 1,DATIWD
02200		OUT 15,DATIWD
02300		POPJ P,
02400	>
02500	
     

00100	READ:	SETZM STWT
00200		SKIPG 1
00300		TRO  POTREAD
00400		TRO RONLY
00500	RSW:	PUSHJ P,SPACE
00600	RSWW:	MOVE BITSAV
00700		TRNN  DTST
00800	IFE USER,<JRST RSWW>
00900	IFN USER,<JRST RSW>
01000		MOVE 3,TRAJER
01100		PUSHJ P,SETSET
01200		JRST FINISH
01300	
     

00100	SPACE:	MOVEI 1,=180
00200		MOVEM 1,COUNT
00300		TRO TRIP
00400		LDB 1,[POINT 1,EXE,32]
00500		MOVEM 1,SOTCHS
00600		JUMPE 1,.+2
00700		TRO STCH
00800	IFN DEB,<SETZM ETIM>
00900		MOVEM BITSAV
01000	IFN TRACK,<SKIPE WALK>
01100	IFN TRACK+USER,<
01200		JRST[	MOVEM 17,USAVE+17
01300			MOVEI 17,USAVE
01400			BLT 17,USAVE+16
01500			JSR STRADR-1
01600			HRLZI 17,USAVE
01700			BLT 17,16
01800			MOVE 17,USAVE+17
01900			POPJ P,]
02000	>
02100	IFE USER,<
02200	GETAD:	INIT 17,417
02300		SIXBIT /AD/
02400		XWD 0,0
02500		JRST[	POP P,3
02600			MOVEI 3,ADBUS
02700			JRST FINISH]
02800		SPCWAR 1,STRADR
02900	>
03000		POPJ P,
03100	
03200	UPDL:	FINISH
03300		BLOCK PDLL
03400	
03500	IFN USER+TRACK,<
03600	USAVE:	BLOCK 20
03700	>
03800	IFN TRACK,<WALK:0>
03900	
04000	IFN REPORT+TRACK,<
04100	DFILE:	0
04200		SIXBIT/TMP/
04300		0
04400	DPPPN:	0
04500	>
04600	LFILE:	0
04700		SIXBIT/TRJ/
04800		0
04900	LPPPN:	0
05000	
05100	GOODIE:	BLOCK 3
     

00100	FINISH:	SPCWAR 636367
00200	IFE USER,<RELEASE 17,
00300		RELEASE 14,
00400	>
00500		SKIPE SEG
00600		JRST [ATSEG:	MOVE 1,SEG
00700				CALLI 1,400016
00800				JRST WAIT
00900				PUSHJ P,SETNAM
01000				JRST WAIT]
01100		MOVEM 3,STATUS
01200		MOVE 1,[XWD TH,THETA]
01300		BLT 1,THETA+6
01400		MOVE 1,JOB
01500		MOVEM 1,REPLY
01600		SKIPN 1
01700		JRST WAITED
01800		SEND REPLY
01900		JRST WAIT
02000		JRST WAIT
02100	
02200	REPLY:	0
02300		EXE
02400	SEG:	0
02500	SOTCH:	0
02600	JOB:	0
02700	IBIT:	000040000000
02800	TICKS:	0
     

00100	SETFLT:	SKIPN NERVES
00200		POPJ P,
00300		MOVEI 6,1
00400		MOVE 4,NERVES
00500	STL:	MOVE 5,OBS(6)
00600		MOVEM 5,(4)
00700		ADDI 4,=16
00800		SOJGE 6,STL
00900		POPJ P,
01000	
01100		XLIST
01200		SUBTTL	SPACEWAR CODE	CONTROL			LOU PAUL
01300		LIST